#!/usr/bin/env python
#  encoding: utf-8
"""

"""

import os, sys 
#  insert a sys.path.append("whatever") in here if django is not
#  on your sys.path.
import django.core.handlers.wsgi
from StringIO import StringIO

def run_locally(application, method, path, query):
    
    #environ = dict(os.environ.items())
    environ = dict()
    environ['DJANGO_SETTINGS_MODULE'] = 'sententialyzer.settings'
    environ['REQUEST_METHOD'] = method
    #environ['SCRIPT_NAME'] = path
    
    environ['PATH_INFO'] = path
    
    
    
    if method == 'GET':
        environ['QUERY_STRING'] = query
        environ['wsgi.input'] = StringIO('')
    else:
        environ['CONTENT_LENGTH'] = len(query)
        environ['wsgi.input'] = StringIO(query)
        
    environ['SERVER_NAME'] = 'localhost'
    environ['SERVER_PORT'] = '80'
    environ['SERVER_PROTOCOL'] = 'HTTP/1.1'
    
    #environ['wsgi.input'] = sys.stdin
    #environ['wsgi.input'] = cStringIO.StringIO(query)
    environ['wsgi.errors'] = sys.stderr
    environ['wsgi.version'] = (1, 0)
    environ['wsgi.multithread'] = False
    environ['wsgi.multiprocess'] = True
    environ['wsgi.run_once'] = True
    
    if environ.get('HTTPS', 'off') in ('on', '1'):
        environ['wsgi.url_scheme'] = 'https'
    else:
        environ['wsgi.url_scheme'] = 'http'
    
    headers_set = []
    headers_sent = []
    
    def write(data):
        if not headers_set:
            raise AssertionError("write() before start_response()")
        
        elif not headers_sent:
            #  Before the first output, send the stored headers
            status, response_headers = headers_sent[:] = headers_set
            sys.stdout.write('Status: %s\r\n' % status)
            for header in response_headers:
                sys.stdout.write('%s: %s\r\n' % header)
            sys.stdout.write('\r\n')
        
        sys.stdout.write(data)
        sys.stdout.flush()
        
        with open('output.html', 'w') as the_file:
            the_file.write(data)
            
    def start_response(status, response_headers, exc_info=None):
        if exc_info:
            try:
                if headers_sent:
                    #  Re-raise original exception if headers sent
                    raise exc_info[0], exc_info[1], exc_info[2]
            finally:
                exc_info = None  #  avoid dangling circular ref
        elif headers_set:
            raise AssertionError("Headers already set!")
        
        headers_set[:] = [status, response_headers]
        return write
    
    result = application(environ, start_response)
    try:
        for data in result:
            if data:  #  don't send headers until body appears
                write(data)
        if not headers_sent:
            write('')  #  send headers now if body was empty
    finally:
        if hasattr(result, 'close'):
            result.close()

#Useful: http://www.eclipsezone.com/eclipse/forums/t77655.html

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../django_prj/sententialyzer')

run_locally(django.core.handlers.wsgi.WSGIHandler(), 'POST', '/auth/authorize', 'user_id=abc1&password=xxx&scope=bopin_r')
